package 设计模式;

public class Singleton {

    //====================================================
    private static Singleton instance = null;

    //无参构造器用于反射
    private Singleton() {

    }

    //正常情况下的获取单利模式
    public static Singleton getInstance_0() {
        if (instance == null)
            instance = new Singleton();
        return instance;
    }

    //用于多线程环境的获取单利模式
    public static synchronized Singleton getInstance_1() {
        if (instance == null)
            instance = new Singleton();
        return instance;
    }

    //====================================================
    //使用内部类来维护单例
    private static class SingletonFactory {
        private static Singleton instance = new Singleton();
    }

    //使用模式下内部类获取单例模式
    public static Singleton getInstance_2() {
        return SingletonFactory.instance;
    }

    //====================================================
    //用于序列化
    public Object readResolve() {
        return instance;
    }

}
